package fun

import (
	"net"
	"net/url"
	"regexp"
)

// @title: 获取URL主域名
// @param: string
// @return: string
// @description:
// @date: 2024/6/11 22:32
func UrlDomain(link string) string {
	if link == "" {
		return ""
	}
	r, err := url.Parse(link)
	if err != nil {
		return ""
	}

	domain := r.Hostname()
	if domain != "" {
		domain = StrToLower(domain)
		domain = StrReplace(domain, "www.", "")
	}

	return domain
}

// @title: 获取服务器端IP
// @param:
// @return: string
// @description:
// @date: 2024/6/11 22:32
func ServeIp() (ip string) {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return ""
	}
	for _, addr := range addrs {
		ipAddr, ok := addr.(*net.IPNet)
		if !ok {
			continue
		}
		if ipAddr.IP.IsLoopback() {
			continue
		}
		if !ipAddr.IP.IsGlobalUnicast() {
			continue
		}
		return ipAddr.IP.String()
	}
	return ""

}

// @title: 验证是否是正确的IP地址
// @param:
// @return: string
// @description:
// @date: 2024/6/11 22:32
func IPValid(ipStr string) bool {
	// 使用 net.ParseIP 检查字符串是否为合法的 IP 地址
	return net.ParseIP(ipStr) != nil
}

// @title: 是否手机号
// @param: 手机号(string)
// @return: true/false(bool)
// @description:
// @date: 2022/7/3 21:10
func IsMobile(mobile string) bool {
	if len(mobile) != 11 {
		return false
	}
	result, _ := regexp.MatchString(`^(1[3|4|5|6|7|8|9][0-9]\d{4,8})$`, mobile)
	if result {
		return true
	}
	return false
}

// @title: 手机号*号处理
// @param: 手机号(string)
// @return: 加*号的手机号(string)
// @description: 非手机号则直接返回原字符
// @date: 2022/7/3 21:13
func MobileStar(mobile string) string {
	if IsMobile(mobile) {
		return mobile[:3] + "****" + mobile[7:]
	}

	return mobile
}

// @title: 是否邮箱
// @param: 邮箱(string)
// @return: true/false(bool)
// @description:
// @date: 2022/7/3 21:16
func IsEmail(email string) bool {
	pattern := `^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$`
	reg := regexp.MustCompile(pattern)
	return reg.MatchString(email)
}
